const Koa =require('koa');
const Router = require('koa-router');
const static = require('./routers/static');
const body = require('koa-better-body');
const session = require('koa-session');
const ejs =require('koa-ejs');
const path = require('path');
const fs = require('fs');
const config = require('./config');

let server = new Koa();
server.listen(config.PORT);
console.log(`server running at ${config.PORT}`);
// 中间件
server.use(body({
    uploadDir: config.UPLOAD_DIR
}))
// 配置session
server.keys = fs.readFileSync('.keys').toString().split('\n');
server.use(session({
    maxAge:20*60*1000,  //设置session有效期 20分钟
    renew:true  //自动
},server));

// 数据库
server.context.db = require('./lib/database');
// config
server.context.config = config;

// 路由
let router = new Router();

// 统一处理
router.use(async (ctx,next)=>{
    try{
        await next();
        if(!ctx.body){
            await ctx.render('www/404'); 
        }
    }catch(e){
        // 判断程序有错直接404、
        await ctx.render('www/404');
        console.log(e);
        ctx.throw(500,'Internal Server Error');
    }
})

//设置admin访问router
router.use('/admin',require('./routers/admin'));
// api
router.use('/api',require('./routers/api'));
//设置普通用户访问router
router.use('',require('./routers/www'));

// 设置静态文件的缓存
static(router);

server.use(router.routes());

ejs(server,{
    root:path.resolve(__dirname,'template'),//ejs去哪找模版
    layout:false,
    viewExt:'ejs',//视图文件的拓展名是什么,
    cache:false,//是否缓存 开发false 发布为true
    debug:false  //一般false
})

// server.use(async ctx=>{
//     // 本来没有render  加入渲染引擎后有render方法
//     // params 渲染谁  第二份是渲染的数据
//     await ctx.render('2',{name:11})
// });